package com.cmc.cloud.cmclink.doc.service;

import com.cmc.cloud.cmclink.bdt.api.base.dto.resp.VesselNameDataRespDTO;
import com.cmc.cloud.cmclink.doc.vo.special.approvepermissionvo.ApprovePermissionConfigUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.special.approvepermissionvo.ApprovePermissionReqVO;
import com.cmc.cloud.cmclink.doc.vo.special.approvepermissionvo.UserWithApprovePermissionRespVO;

import javax.validation.Valid;
import java.util.List;

/**
 * 用户船舶审批权限配置 Service 接口
 *
 * @author 集运管理员
 */
public interface ApprovePermissionConfigService {

    /**
     * 更新用户船舶审批权限配置
     *
     * @param updateReqVo 更新信息
     */
    void updateApprovePermissionConfig(@Valid ApprovePermissionConfigUpdateReqVO updateReqVo);

    /**
     * 获得除用户之外所有船舶审批权限配置
     *
     * @param reqVo     用户编码
     * @return 获得除用户之外所有船舶审批权限配置
     */
    List<VesselNameDataRespDTO> getApprovePermissionConfigWithoutUser(ApprovePermissionReqVO reqVo);

    /**
     * 获得用户船舶审批权限配置
     *
     * @param reqVo     用户编码
     * @return 获得用户船舶审批权限配置
     */
    UserWithApprovePermissionRespVO getApprovePermissionConfigWithUser(ApprovePermissionReqVO reqVo);

    /**
     * 删除用户船舶审批权限配置
     *
     * @param updateReqVo 船舶代码列表
     */
    void deleteApprovePermissionConfig(@Valid ApprovePermissionConfigUpdateReqVO updateReqVo);

    /**
     * 设置用户审批非自营船权限
     * @param reqVo reqVo
     */
    void setNonOwnedShip(ApprovePermissionReqVO reqVo);
}
